package ar.com.sgsvm.dao.sqlite;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import ar.com.sgsvm.dao.IClienteDao;
import ar.com.sgsvm.dao.SqliteDaoFactory;
import ar.com.sgsvm.entity.Cliente;
import ar.com.sgsvm.exceptions.NonexistentEntityException;

public class ClienteSqliteDao implements IClienteDao {

	@Override
	public Long create(Cliente cliente) throws Exception {
		ContentValues contentValues = new ContentValues();
		contentValues.put("apellido", cliente.getApellido());
		contentValues.put("nombre", cliente.getNombre());
		contentValues.put("direccion", cliente.getDireccion());
		contentValues.put("idLocalidad", cliente.getLocalidad().getIdLocalidad());
		contentValues.put("telefono", cliente.getTelefono());
		SqliteDaoFactory sqliteDaoFactory = new SqliteDaoFactory();
		return sqliteDaoFactory.open().insert("Cliente", null, contentValues);
	}

	@Override
	public List<Cliente> readAll() throws Exception {
		SqliteDaoFactory sqliteDaoFactory = new SqliteDaoFactory();
		SQLiteDatabase sqliteDatabase = sqliteDaoFactory.open();
		Cursor cursor = sqliteDatabase.query("Cliente", null, null, null, null, null, null);
		List<Cliente> clientes = new ArrayList<Cliente>();
		if (cursor.moveToFirst()) {
			do {
				Cliente cliente = new Cliente();
				cliente.setIdCliente(cursor.getLong(cursor.getColumnIndex("idCliente")));
				cliente.setApellido(cursor.getString(cursor.getColumnIndex("apellido")));
				cliente.setNombre(cursor.getString(cursor.getColumnIndex("nombre")));
				cliente.setDireccion(cursor.getString(cursor.getColumnIndex("direccion")));
				cliente.setLocalidad(sqliteDaoFactory.getLocalidadDao().readById(cursor.getLong(cursor.getColumnIndex("idLocalidad"))));
				cliente.setTelefono(cursor.getLong(cursor.getColumnIndex("telefono")));
				clientes.add(cliente);
			} while (cursor.moveToNext());
		}
		cursor.close();
		return clientes;
	}

	@Override
	public Cliente readById(Long idCliente) throws Exception {
		SqliteDaoFactory sqliteDaoFactory = new SqliteDaoFactory();
		SQLiteDatabase sqliteDatabase = sqliteDaoFactory.open();
		Cursor cursor = sqliteDatabase.query("Cliente", null, "idCliente = ?", new String[]{String.valueOf(idCliente)}, null, null, null);
		if (cursor.moveToFirst()){
			Cliente cliente = new Cliente();
			cliente.setIdCliente(idCliente);
			cliente.setApellido(cursor.getString(cursor.getColumnIndex("apellido")));
			cliente.setNombre(cursor.getString(cursor.getColumnIndex("nombre")));
			cliente.setDireccion(cursor.getString(cursor.getColumnIndex("direccion")));
			cliente.setLocalidad(sqliteDaoFactory.getLocalidadDao().readById(cursor.getLong(cursor.getColumnIndex("idLocalidad"))));
			cliente.setTelefono(cursor.getLong(cursor.getColumnIndex("telefono")));
			cursor.close();
			return cliente;
		} else {
			throw new NonexistentEntityException("No existe el cliente con id " + String.valueOf(idCliente));
		}
	}

	@Override
	public void update(Cliente cliente) throws Exception {
		ContentValues contentValues = new ContentValues();
		contentValues.put("apellido", cliente.getApellido());
		contentValues.put("nombre", cliente.getNombre());
		contentValues.put("direccion", cliente.getDireccion());
		contentValues.put("idLocalidad", cliente.getLocalidad().getIdLocalidad());
		contentValues.put("telefono", cliente.getTelefono());
		SqliteDaoFactory sqliteDaoFactory = new SqliteDaoFactory();
		sqliteDaoFactory.open().update("Cliente", contentValues, "idCliente = ?", new String[] { String.valueOf(cliente.getIdCliente()) });
	}

	@Override
	public void delete(Cliente cliente) throws Exception {
		SqliteDaoFactory sqliteDaoFactory = new SqliteDaoFactory();
		sqliteDaoFactory.open().delete("Cliente", "idCliente = ?", new String[] { String.valueOf(cliente.getIdCliente()) });
	}

}
